package io.github.talelin.latticy.dto;

import lombok.Data;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

/**
 * 积分记录DTO
 * @author talelin
 */
@Data
public class PointsRecordDTO {

    /**
     * 用户ID
     */
    @NotNull(message = "用户ID不能为空")
    private Long userId;

    /**
     * 积分变动类型：earned(获得), used(使用), expired(过期), adjusted(调整)
     */
    @NotBlank(message = "积分类型不能为空")
    @Size(max = 20, message = "积分类型长度不能超过20个字符")
    private String type;

    /**
     * 积分数量
     */
    @NotNull(message = "积分数量不能为空")
    @Min(value = 1, message = "积分数量必须大于0")
    private Integer points;

    /**
     * 积分标题
     */
    @NotBlank(message = "积分标题不能为空")
    @Size(max = 100, message = "积分标题长度不能超过100个字符")
    private String title;

    /**
     * 积分描述
     */
    @Size(max = 255, message = "积分描述长度不能超过255个字符")
    private String description;

    /**
     * 积分来源/用途：purchase(购买), signin(签到), activity(活动), exchange(兑换), admin(管理员调整)等
     */
    @Size(max = 50, message = "积分来源长度不能超过50个字符")
    private String source;

    /**
     * 关联订单ID
     */
    private Long orderId;

    /**
     * 状态：success(成功), pending(处理中), failed(失败), expired(已过期)
     */
    private String status = "success";

    /**
     * 额外信息（JSON格式）
     */
    private String extra;
}

